package com.wen.edu.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wen.edu.entity.EduCourse;
import com.wen.edu.entity.vo.CourseInfoVO;
import com.wen.edu.entity.vo.CoursePublishVo;
import com.wen.edu.entity.vo.front.FrontCourseInfoVO;
import com.wen.edu.entity.vo.front.FrontCourseQueryVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author wen
 * @since 2021-05-29
 */
public interface EduCourseService extends IService<EduCourse> {
    /**
     * 添加课程信息
     *
     * @param courseInfoVO 要添加的课程信息
     * @return 添加成功后的课程ID
     */
    String addCourseInfo(CourseInfoVO courseInfoVO);

    /**
     * 根据课程ID查询添加至数据库中的课程基本信息
     *
     * @param courseId 课程ID
     * @return result of operation
     */
    CourseInfoVO getCourseInfo(String courseId);

    /**
     * 修改课程信息
     *
     * @param courseInfoVO 要添加的课程信息
     */
    void updateCourseInfo(CourseInfoVO courseInfoVO);

    /**
     * 根据课程ID查询确认课程信息
     *
     * @param courseId 课程ID
     * @return result of operation
     */
    CoursePublishVo getPublishCourseInfo(String courseId);

    /**
     * 删除课程信息(包括课程基本信息，课程大纲，课程视频等相关信息)
     *
     * @param courseId 课程id
     */
    void removeAllCourseInfo(String courseId);

    /**
     * 查询前台显示的热门课程
     *
     * @return list
     */
    List<EduCourse> selectHotCourses();

    /**
     * 带条件分页查询前台课程信息
     *
     * @param pageCourse         分页
     * @param frontCourseQueryVO 条件
     * @return result of operation
     */
    Map<String, Object> pageFrontCourse(Page<EduCourse> pageCourse, FrontCourseQueryVO frontCourseQueryVO);

    /**
     * 根据课程id查询课程信息(多表查询)
     * @param courseId 课程id
     * @return VO对象
     */
    FrontCourseInfoVO getFrontCourseInfo(String courseId);
}
